home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #5 / Amiga Plus CD - 2000 - No. 5.iso / Tools / Dev / lame_src / Makefile < prev    next >
Makefile  |  2000-01-01  |  11KB  |  386 lines

  1. # Makefile for LAME 3.xx
  2. #
  3. # LAME is reported to work under:  
  4. # Linux (i86), NetBSD 1.3.2 (StrongARM), FreeBSD (i86)
  5. # Compaq Alpha(OSF, Linux, Tru64 Unix), Sun Solaris, SGI IRIX,
  6. # OS2 Warp, Macintosh PPC, BeOS, Amiga and even VC++ 
  7. UNAME = $(shell uname)
  8. ARCH = $(shell uname -m)
  9.  
  10.  
  11. # generic defaults. OS specific options go in versious sections below
  12. PGM = lame
  13. CC = gcc
  14. CC_OPTS =  -O
  15. GTK = 
  16. GTKLIBS = 
  17. SNDLIB = -DLAMESNDFILE
  18. LIBSNDFILE =  
  19. LIBS = -lm 
  20. MAKEDEP = -M
  21. BRHIST_SWITCH = 
  22. LIBTERMCAP = 
  23. RM = rm -f
  24.  
  25.  
  26.  
  27. ##########################################################################
  28. # -DHAVEMPGLIB compiles the mpglib *decoding* library into libmp3lame
  29. ##########################################################################
  30. CPP_OPTS += -DHAVEMPGLIB 
  31.  
  32. ##########################################################################
  33. # -DFLOAT8_is_float will FLOAT8 as float
  34. # -DFLOAT8_is_double  will FLOAT8 as double (default)
  35. #  NOTE: RH: 7/00:  if FLOAT8=float, it breaks resampling and VBR code 
  36. ##########################################################################
  37. CPP_OPTS += -DFLOAT8_is_double
  38.  
  39.  
  40.  
  41.  
  42. ##########################################################################
  43. # Define these in the OS specific sections below to compile in support
  44. # for the Ogg Vorbis audio format (both decoding and encoding)
  45. # VORBIS = -DHAVEVORBIS  -I ../vorbis/include
  46. # VORBIS_LIB = -L ../vorbis/lib -lvorbis
  47. ##########################################################################
  48.  
  49. ##########################################################################
  50. # Define these in the OS specific sections below to compile in code 
  51. # for the optional VBR bitrate histogram.  
  52. # Requires ncurses, but libtermcap also works.  
  53. # If you have any trouble, just dont define these
  54. #
  55. # BRHIST_SWITCH = -DBRHIST
  56. # LIBTERMCAP = -lncurses
  57. # LIBTERMCAP = -ltermcap
  58. #
  59. # or, to try and simulate TERMCAP (ANSI), use:
  60. # BRHIST_SWITCH = -DBRHIST -DNOTERMCAP
  61. #
  62. ##########################################################################
  63.  
  64.  
  65. ##########################################################################
  66. # Define these in the OS specific sections below to compile in code for:
  67. #
  68. # SNDLIB =                no file i/o 
  69. # SNDLIB = -DLAMESNDFILE  to use internal LAME soundfile routines 
  70. # SNDLIB = -DLIBSNDFILE   to use Erik de Castro Lopo's libsndfile 
  71. # http://www.zip.com.au/~erikd/libsndfile/
  72. #
  73. # Note: at present, libsndfile does not support input from stdin.  
  74. #
  75. # for example:
  76. #  SNDLIB = -DLIBSNDFILE
  77. #  LIBSNDFILE=-lsndfile 
  78. #  if libsndfile is in a custom location, try:
  79. #  LIBSNDFILE=-L $(LIBSNDHOME) -lsndfile  -I $(LIBSNDHOME)
  80. ##########################################################################
  81.  
  82.  
  83. ##########################################################################
  84. # Define these in the OS specific sections below to compile in code for
  85. # the GTK mp3 frame analyzer
  86. #
  87. # Requires  -DHAVEMPGLIB
  88. # and SNDLIB = -DLAME or -DLIBSNDFILE
  89. #
  90. # GTK = -DHAVEGTK `gtk-config --cflags`
  91. # GTKLIBS = `gtk-config --libs` 
  92. #
  93. ##########################################################################
  94.  
  95.  
  96.  
  97.  
  98. ##########################################################################
  99. # LINUX   
  100. ##########################################################################
  101. ifeq ($(UNAME),Linux)
  102. #  remove these lines if you dont have GTK, or dont want the GTK frame analyzer
  103.    GTK = -DHAVEGTK `gtk-config --cflags`
  104.    GTKLIBS = `gtk-config --libs` 
  105. # Comment out next 2 lines if you want to remove VBR histogram capability
  106.    BRHIST_SWITCH = -DBRHIST
  107.    LIBTERMCAP = -lncurses
  108. #  uncomment to use LIBSNDFILE
  109. #   SNDLIB = -DLIBSNDFILE
  110. #   LIBSNDFILE=-lsndfile 
  111.  
  112. # uncomment to compile in Vorbis support
  113. #   VORBIS = -DHAVEVORBIS -I/home/mt/mp3/vorbis/include
  114. #   VORBIS_LIB = -L/home/mt/mp3/vorbis/lib -lvorbis
  115.  
  116.  
  117. # suggested for gcc-2.7.x
  118.    CC_OPTS =  -O3 -fomit-frame-pointer -funroll-loops -ffast-math  -finline-functions -Wall
  119. #  CC_OPTS =  -O9 -fomit-frame-pointer -fno-strength-reduce -mpentiumpro -ffast-math -finline-functions -funroll-loops -Wall -malign-double -g -march=pentiumpro -mfancy-math-387 -pipe 
  120.  
  121. #  for debugging:
  122. #   CC_OPTS =  -UNDEBUG -O -Wall -g -DABORTFP
  123.  
  124. #  for lots of debugging:
  125. #   CC_OPTS =  -DDEBUG -UNDEBUG  -O -Wall -g -DABORTFP 
  126.  
  127.  
  128.  
  129. # these options for gcc-2.95.2 to produce fast code
  130. #   CC_OPTS = $(FEATURES)\
  131. #    -Wall -O9 -fomit-frame-pointer -march=pentium \
  132. #    -finline-functions -fexpensive-optimizations \
  133. #    -funroll-loops -funroll-all-loops -pipe -fschedule-insns2 \
  134. #    -fstrength-reduce \
  135. #    -malign-double -mfancy-math-387 -ffast-math 
  136.  
  137.  
  138. ##########################################################################
  139. # LINUX on Digital/Compaq Alpha CPUs
  140. ##########################################################################
  141. ifeq ($(ARCH),alpha)
  142. # double is faster than float on Alpha
  143. CC_OPTS =       -O4 -Wall -fomit-frame-pointer -ffast-math -funroll-loops \
  144.                 -mfp-regs -fschedule-insns -fschedule-insns2 \
  145.                 -finline-functions \
  146. #                -DFLOAT=double
  147. # add "-mcpu=21164a -Wa,-m21164a" to optimize for 21164a (ev56) CPU
  148.  
  149. # Compaq's C Compiler
  150. #CC = ccc
  151. # Options for Compaq's C Compiler
  152. #CC_OPTS = -fast -Wall
  153.  
  154. # standard Linux libm
  155. #LIBS    =    -lm  
  156. # optimized libffm (free fast math library)
  157. #LIBS    =    -lffm  
  158. # Compaq's fast math library
  159. LIBS    =       -lcpml 
  160. endif
  161. endif
  162.  
  163.  
  164.  
  165. ##########################################################################
  166. # FreeBSD
  167. ##########################################################################
  168. ifeq ($(UNAME),FreeBSD)
  169. #  remove if you do not have GTK or do not want the GTK frame analyzer
  170.    GTK = -DHAVEGTK `gtk12-config --cflags`
  171.    GTKLIBS = `gtk12-config --libs` 
  172. # Comment out next 2 lines if you want to remove VBR histogram capability
  173.    BRHIST_SWITCH = -DBRHIST
  174.    LIBTERMCAP = -lncurses
  175.  
  176. endif
  177.  
  178.  
  179. ##########################################################################
  180. # SunOS
  181. ##########################################################################
  182. ifeq ($(UNAME),SunOS) 
  183.    CC = cc
  184.    CC_OPTS = -O -xCC      
  185.    MAKEDEP = -xM
  186. endif
  187.  
  188.  
  189. ##########################################################################
  190. # SGI
  191. ##########################################################################
  192. ifeq ($(UNAME),IRIX64) 
  193.    CC = cc
  194.    CC_OPTS = -O3 -woff all 
  195.  
  196. #optonal:
  197. #   GTK = -DHAVEGTK `gtk-config --cflags`
  198. #   GTKLIBS = `gtk-config --libs`
  199. #   BRHIST_SWITCH = -DBRHIST
  200. #   LIBTERMCAP = -lncurses
  201.  
  202. endif
  203. ifeq ($(UNAME),IRIX) 
  204.    CC = cc
  205.    CC_OPTS = -O3 -woff all 
  206. endif
  207.  
  208.  
  209.  
  210. ##########################################################################
  211. # Compaq Alpha running Dec Unix (OSF)
  212. ##########################################################################
  213. ifeq ($(UNAME),OSF1)
  214.    CC = cc
  215.    CC_OPTS = -fast -O3 -std -g3 -non_shared
  216. endif
  217.  
  218. ##########################################################################
  219. # BeOS
  220. ##########################################################################
  221. ifeq ($(UNAME),BeOS)
  222.    CC = $(BE_C_COMPILER)
  223.    LIBS =
  224. ifeq ($(ARCH),BePC)
  225.    CC_OPTS = -O9 -fomit-frame-pointer -march=pentium \
  226.    -mcpu=pentium -ffast-math -funroll-loops \
  227.    -fprofile-arcs -fbranch-probabilities
  228. else
  229.    CC_OPTS = -opt all
  230.    MAKEDEP = -make
  231. endif
  232. endif
  233.  
  234. ###########################################################################
  235. # MOSXS (Rhapsody PPC)
  236. ###########################################################################
  237. ifeq ($(UNAME),Rhapsody)
  238.    CC = cc
  239.    LIBS =
  240.    CC_OPTS = -O9 -ffast-math -funroll-loops -fomit-frame-pointer
  241.    MAKEDEP = -make 
  242.    
  243. endif
  244. ##########################################################################
  245. # OS/2
  246. ##########################################################################
  247. # Properly installed EMX runtime & development package is a prerequisite.
  248. # tools I used: make 3.76.1, uname 1.12, sed 2.05, PD-ksh 5.2.13
  249. #
  250. ##########################################################################
  251. ifeq ($(UNAME),OS/2)
  252.    SHELL=sh    
  253.    CC = gcc
  254.    CC_OPTS = -O3
  255.    PGM = lame.exe
  256.    LIBS =
  257.  
  258. # I use the following for slightly better performance on my Pentium-II
  259. # using pgcc-2.91.66:
  260. #   CC_OPTS = -O6 -ffast-math -funroll-loops -mpentiumpro -march=pentiumpro
  261.  
  262. # Comment out next 2 lines if you want to remove VBR histogram capability
  263.    BRHIST_SWITCH = -DBRHIST
  264.    LIBTERMCAP = -ltermcap
  265.  
  266. # Uncomment & inspect the 2 GTK lines to use MP3x GTK frame analyzer.
  267. # Properly installed XFree86/devlibs & GTK+ is a prerequisite.
  268. # The following works for me using Xfree86/OS2 3.3.5 and GTK+ 1.2.3:
  269. #   GTK = -DHAVEGTK -IC:/XFree86/include/gtk12 -Zmt -D__ST_MT_ERRNO__ -IC:/XFree86/include/glib12 -IC:/XFree86/include
  270. #   GTKLIBS = -LC:/XFree86/lib -Zmtd -Zsysv-signals -Zbin-files -lgtk12 -lgdk12 -lgmodule -lglib12 -lXext -lX11 -lshm -lbsd -lsocket -lm
  271. endif
  272.  
  273.  
  274.  
  275.  
  276. # 10/99 added -D__NO_MATH_INLINES to fix a bug in *all* versions of
  277. # gcc 2.8+ as of 10/99.  
  278.  
  279. CC_SWITCHES = -DNDEBUG -D__NO_MATH_INLINES $(CC_OPTS) $(SNDLIB) $(GTK) \
  280. $(BRHIST_SWITCH) $(VORBIS) 
  281. c_sources = \
  282.         brhist.c \
  283.     bitstream.c \
  284.     fft.c \
  285.     get_audio.c \
  286.         id3tag.c \
  287.     ieeefloat.c \
  288.         lame.c \
  289.         newmdct.c \
  290.         parse.c \
  291.     portableio.c \
  292.     psymodel.c \
  293.     quantize.c \
  294.     quantize-pvt.c \
  295.     vbrquantize.c \
  296.     reservoir.c \
  297.     tables.c \
  298.     takehiro.c \
  299.     timestatus.c \
  300.     util.c \
  301.     vorbis_interface.c \
  302.         VbrTag.c \
  303.         version.c \
  304.         mpglib/common.c \
  305.         mpglib/dct64_i386.c \
  306.         mpglib/decode_i386.c \
  307.         mpglib/layer3.c \
  308.         mpglib/tabinit.c \
  309.         mpglib/interface.c \
  310.         mpglib/main.c 
  311.  
  312. OBJ = $(c_sources:.c=.o)
  313. DEP = $(c_sources:.c=.d)
  314.  
  315. gtk_sources = gtkanal.c gpkplotting.c
  316. gtk_obj = $(gtk_sources:.c=.o)
  317. gtk_dep = $(gtk_sources:.c=.d)
  318.  
  319.  
  320.  
  321. NASM = nasm
  322. ASFLAGS=-f elf -i i386/
  323. %.o: %.nas
  324.     $(NASM) $(ASFLAGS) $< -o $@
  325. %.o: %.s
  326.     gcc -c $< -o $@
  327.  
  328. ## use MMX extension. you need nasm and MMX supported CPU.
  329. #CC_SWITCCH += -DMMX_choose_table
  330. #OBJ += i386/choose_table.o
  331.  
  332. %.o: %.c 
  333.     $(CC) $(CPP_OPTS) $(CC_SWITCHES) -c $< -o $@
  334.  
  335. %.d: %.c
  336.     $(SHELL) -ec '$(CC) $(MAKEDEP)  $(CPP_OPTS) $(CC_SWITCHES)  $< | sed '\''s;$*.o;& $@;g'\'' > $@'
  337.  
  338. all: $(PGM)
  339.  
  340. $(PGM):    main.o $(gtk_obj) libmp3lame.a 
  341.     $(CC) $(CC_OPTS) -o $(PGM)  main.o $(gtk_obj) -L. -lmp3lame $(LIBS) $(LIBSNDFILE) $(GTKLIBS) $(LIBTERMCAP) $(VORBIS_LIB)
  342.  
  343. mp3x:    mp3x.o $(gtk_obj) libmp3lame.a
  344.     $(CC) -o mp3x mp3x.o $(gtk_obj) $(OBJ) $(LIBS) $(LIBSNDFILE) $(GTKLIBS) $(LIBTERMCAP) $(VORBIS_LIB)
  345.  
  346. mp3rtp:    rtp.o mp3rtp.o libmp3lame.a
  347.     $(CC) -o mp3rtp mp3rtp.o rtp.o   $(OBJ) $(LIBS) $(LIBSNDFILE) $(GTKLIBS) $(LIBTERMCAP) $(VORBIS_LIB)
  348.  
  349. libmp3lame.a:  $(OBJ) Makefile
  350. #    cd libmp3lame
  351. #    make libmp3lame
  352.     ar cr libmp3lame.a  $(OBJ) 
  353.  
  354. clean:
  355.     -$(RM) $(gtk_obj) $(OBJ) $(DEP) $(PGM) main.o rtp.o mp3rtp mp3rtp.o \
  356.          mp3x.o mp3x libmp3lame.a 
  357.  
  358.  
  359. tags: TAGS
  360.  
  361. TAGS: ${c_sources}
  362.     etags -T ${c_sources}
  363.  
  364. ifneq ($(MAKECMDGOALS),clean)
  365.   -include $(DEP)
  366. endif
  367.  
  368.  
  369. #
  370. #  testcase.mp3 is a 2926 byte file.  The first number output by
  371. #  wc is the number of bytes which differ between new output
  372. #  and 'official' results.  
  373. #
  374. #  Because of compilier options and effects of roundoff, the 
  375. #  number of bytes which are different may not be zero, but
  376. #  should be at most 30.
  377. #
  378. test: $(PGM)
  379.     ./lame  --nores -h testcase.wav testcase.new.mp3
  380.     cmp -l testcase.new.mp3 testcase.mp3 | wc
  381.  
  382. testg: $(PGM)
  383.     ./lame -g -h ../test/castanets.wav
  384.